using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.IO;
using System.Reflection;

namespace GPSou
{
    public partial class Configuracion : Form
    {
        XmlDocument xmlDoc;

        public Configuracion()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            DialogResult = System.Windows.Forms.DialogResult.OK;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string[] puertos = System.IO.Ports.SerialPort.GetPortNames();
            puertoCtrlHiden.Items.Clear();
            for (int i = 0; i < puertos.Length; i++)
                puertoCtrlHiden.Items.Add(puertos[i]);

            string appFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
            string confFile = Path.Combine(appFolder, "config.xml");

            xmlDoc = new XmlDocument();
            if(File.Exists(confFile)) 
            {
                XmlNode paramNode = null;                
                xmlDoc.Load(confFile);
                paramNode=xmlDoc.SelectSingleNode("/config/param[@nombre='usuario']");
                UsuarioCtrl.Text=paramNode.Attributes["valor"].Value;
                paramNode=xmlDoc.SelectSingleNode("/config/param[@nombre='clave']");
                ClaveCtrl.Text=paramNode.Attributes["valor"].Value;
                paramNode=xmlDoc.SelectSingleNode("/config/param[@nombre='refreshTime']");
                refreshTimeCtrl.Text=paramNode.Attributes["valor"].Value;
                paramNode=xmlDoc.SelectSingleNode("/config/param[@nombre='puerto']");
                puertoCtrl.Text=paramNode.Attributes["valor"].Value;
            }
            else
            {
                XmlElement xmlElement;
                XmlNode xmlNode;

                xmlNode = xmlDoc.CreateNode(XmlNodeType.XmlDeclaration, "", "");
                xmlDoc.AppendChild(xmlNode);
                xmlElement = xmlDoc.CreateElement("config");
                xmlDoc.AppendChild(xmlElement);
                xmlElement = xmlDoc.CreateElement("param");
                xmlElement.SetAttribute("nombre", "usuario");
                xmlElement.SetAttribute("valor", UsuarioCtrl.Text);
                xmlDoc.ChildNodes.Item(1).AppendChild(xmlElement);
                xmlElement = xmlDoc.CreateElement("param");
                xmlElement.SetAttribute("nombre", "clave");
                xmlElement.SetAttribute("valor", ClaveCtrl.Text);
                xmlDoc.ChildNodes.Item(1).AppendChild(xmlElement);
                xmlElement = xmlDoc.CreateElement("param");
                xmlElement.SetAttribute("nombre", "refreshTime");
                xmlElement.SetAttribute("valor", refreshTimeCtrl.Text);
                xmlDoc.ChildNodes.Item(1).AppendChild(xmlElement);
                xmlElement = xmlDoc.CreateElement("param");
                xmlElement.SetAttribute("nombre", "puerto");
                xmlElement.SetAttribute("valor", puertoCtrl.Text);
                xmlDoc.ChildNodes.Item(1).AppendChild(xmlElement);

                xmlElement = xmlDoc.CreateElement("param");
                xmlElement.SetAttribute("nombre", "interval");
                xmlElement.SetAttribute("valor", "1");
                xmlDoc.ChildNodes.Item(1).AppendChild(xmlElement);
                xmlElement = xmlDoc.CreateElement("param");
                xmlElement.SetAttribute("nombre", "recordOn");
                xmlElement.SetAttribute("valor", "false");
                xmlDoc.ChildNodes.Item(1).AppendChild(xmlElement);

            }
        }

        private void puertoCtrlHiden_SelectedIndexChanged(object sender, EventArgs e)
        {
            puertoCtrl.Text = puertoCtrlHiden.Text;
            puertoCtrl.Focus();
        }

        private void Form1_Validating(object sender, CancelEventArgs e)
        {

        }


        private void Form1_Closing(object sender, CancelEventArgs e)
        {
            string appFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
            string confFile = Path.Combine(appFolder, "config.xml");

            XmlNode paramNode;
            paramNode = xmlDoc.SelectSingleNode("/config/param[@nombre='usuario']");
            paramNode.Attributes["valor"].Value = UsuarioCtrl.Text;
            paramNode = xmlDoc.SelectSingleNode("/config/param[@nombre='clave']");
            paramNode.Attributes["valor"].Value = ClaveCtrl.Text;
            paramNode = xmlDoc.SelectSingleNode("/config/param[@nombre='refreshTime']");
            paramNode.Attributes["valor"].Value = refreshTimeCtrl.Text;
            paramNode = xmlDoc.SelectSingleNode("/config/param[@nombre='puerto']");
            paramNode.Attributes["valor"].Value = puertoCtrl.Text;

            xmlDoc.Save(confFile);

        }

        private void refreshTimeCtrl_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (((e.KeyChar < '0') || (e.KeyChar > '9')) && (e.KeyChar!=(char)Keys.Back))
            {
                e.Handled = true;
            }

        }

    }
}